﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Telerik.WinControls.UI;
using System.Data.SqlClient;
using System.Xml;

namespace QuanlyThoiGian
{
    public partial class FormThietLapThoiGian : Form
    {
        private DateTime dayDefault;
        private DateTime dayCur;

        public FormThietLapThoiGian()
        {
            InitializeComponent();
        }

        private void FormThietLapThoiGian_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'quanLyThoiGianDataSet.NgayNghi' table. You can move, or remove it, as needed.
            loadcheck();
 
            try
            {
                DateTime d = DateTime.Parse(heThongTableAdapter1.GetHeThong("giovao").ToString());
                giovaodateTimePicker.Value = d;
            }catch(Exception){
                MessageBox.Show("Không thể lấy giờ vào !");
            }
            
            radCalendar1.FirstDayOfWeek = FirstDayOfWeek.Monday;
            dayDefault = radCalendar1.SelectedDate;
            showall();
        }

        private void radCalendar1_SelectionChanged(object sender, EventArgs e)
        {
            if (radCalendar1.SelectedDates.Count > 0)
            {
                dayCur = radCalendar1.SelectedDates[0];
                ngaynghiDateTimePicker.Value = dayCur;
                motaTextBox.Text = ngayNghiTableAdapter.GetMoTa(dayCur.ToShortDateString());
            }                
        }

        private void radCalendar1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            
            if (radCalendar1.SpecialDays.Find(dayCur).Count() == 0)
            {
                try
                {
                    quanLyThoiGianDataSet.NgayNghi.AddNgayNghiRow(dayCur, motaTextBox.Text);
                    ngayNghiTableAdapter.Update(quanLyThoiGianDataSet);
                   // MessageBox.Show(quanLyThoiGianDataSet.NgayNghi.Rows.Count.ToString());

                    //MessageBox.Show("has selected");
                    RadCalendarDay day = new RadCalendarDay(dayCur);
                    radCalendar1.SpecialDays.Add(day);
                    day.Image = global::QuanlyThoiGian.Properties.Resources.check2;
                    ngaynghiDateTimePicker.Value = dayCur;
                }
                catch(ConstraintException)
                {
                    MessageBox.Show("ko the them");
                }                                          
            }
            else
            {
                RadCalendarDay day = radCalendar1.SpecialDays.Find(dayCur).First();
                QuanLyThoiGianDataSet.NgayNghiRow row = quanLyThoiGianDataSet.NgayNghi.FindByNgaynghi(day.Date);
                quanLyThoiGianDataSet.NgayNghi.RemoveNgayNghiRow(row);
                ngayNghiTableAdapter.Delete1(day.Date.ToShortDateString());
                radCalendar1.SpecialDays.Remove(day);
            }                        
        }
        /// <summary>
        /// Show cac ngay nghi duoi co so du lieu
        /// </summary>
        private void showall()
        {
            ngayNghiTableAdapter.Fill(quanLyThoiGianDataSet.NgayNghi);
            DataRowCollection rows = quanLyThoiGianDataSet.NgayNghi.Rows;
            radCalendar1.SpecialDays.Clear();
            foreach(DataRow row in rows){
                //MessageBox.Show(row[0].ToString());
                DateTime d = DateTime.Parse(row[0].ToString());
                RadCalendarDay day = new RadCalendarDay(d);
                radCalendar1.SpecialDays.Add(day);
                day.Image = global::QuanlyThoiGian.Properties.Resources.check2;
            }
        }

        private void OK_Click(object sender, EventArgs e)
        {
            DateTime d = giovaodateTimePicker.Value;
            try
            {
                heThongTableAdapter1.UpdateHeThong(d.ToLongTimeString(), "giovao");
                MessageBox.Show("Bạn đã thiết lập giờ vào là " + d.ToLongTimeString() + " thành công !");
            }
            catch(SqlException)
            {
                MessageBox.Show("Lỗi thiết lập thời gian");
            }
            
        }

        private void Thembutton_Click(object sender, EventArgs e)
        {
            if (kiemtra(ngaynghiDateTimePicker.Value) == false)
            {
                MessageBox.Show("Không thể thiết lập ngày nghỉ ở hiện tại hay quá khứ !");
                return;
            }
            try
            {
                ngayNghiTableAdapter.Insert(ngaynghiDateTimePicker.Value, motaTextBox.Text);
                showall();
            }
            catch (SqlException)
            {
                MessageBox.Show("Không thể thêm ngày này !");
            }            
        }

        private void Xoabutton_Click(object sender, EventArgs e)
        {
            ngayNghiTableAdapter.Delete1(dayCur.ToShortDateString());
            motaTextBox.Text = "";
            showall();
        }

        private void Suabutton_Click(object sender, EventArgs e)
        {
            ngayNghiTableAdapter.UpdateMota(motaTextBox.Text,ngaynghiDateTimePicker.Value.ToShortDateString());
            
        }

        private Boolean kiemtra(DateTime d)
        {
            if (d <= DateTime.Today)
            {               
                return false;
            }
            else return true;
        }

        private void addDay(String d,String mota)
        {
            DateTime current = DateTime.Today;
            int curmonth = current.Month;
            for (int i = curmonth; i <= 12; i++)//vong lap so thu tu cac thang
            {
                int days = DateTime.DaysInMonth(current.Year, i);
                for (int j = 1; j <= days; j++)//vong lap so thu tu cac ngay trong thang
                {
                    DateTime dt = new DateTime(current.Year, i, j);                  
                    if (dt > current)//neu lon hon ngay hien tai
                    {
                        if (dt.DayOfWeek.ToString() == d)//neu la thu bay hoac chu nhat
                        {
                            try
                            {
                                ngayNghiTableAdapter.Insert(dt,mota);                                
                                
                            }
                            catch (SqlException)
                            {
                                MessageBox.Show("Không thể thêm ngày này !");
                            }         
                        }
                    }                    
                }
                showall();
            }
            
        }

        private void deleteDay(String d)
        {
            DateTime current = DateTime.Today;
            int curmonth = current.Month;
            for (int i = curmonth; i <= 12; i++)//vong lap so thu tu cac thang
            {
                int days = DateTime.DaysInMonth(current.Year, i);
                for (int j = 1; j <= days; j++)//vong lap so thu tu cac ngay trong thang
                {
                    DateTime dt = new DateTime(current.Year, i, j);
                    if (dt > current)//neu lon hon ngay hien tai
                    {
                        if (dt.DayOfWeek.ToString() == d)//neu la thu bay hoac chu nhat
                        {
                            try
                            {
                                ngayNghiTableAdapter.Delete1(dt.ToShortDateString());                                
                            }
                            catch (SqlException)
                            {
                                MessageBox.Show("Không thể xóa ngày này !");
                            }
                        }
                    }
                }
                showall();
            }
        }

        private void thubaycheckBox_CheckedChanged(object sender, EventArgs e)
        {
            if (thubaycheckBox.Checked)
            {
                addDay("Saturday","Thứ bảy");
                if (heThongTableAdapter1.UpdateHeThong("true", "thubay") > 0)
                {
                    MessageBox.Show("Thêm các ngày nghỉ thứ bảy trong năm thành công !");
                }
                else
                {
                    MessageBox.Show("Lỗi");
                }
            }
            else
            {
                deleteDay("Saturday");
                if (heThongTableAdapter1.UpdateHeThong("false", "thubay") > 0)
                {
                    MessageBox.Show("Xóa các ngày nghỉ thứ bảy trong năm thành công !");
                }
                else
                {
                    MessageBox.Show("Lỗi");
                }
            }
        }

        private void chunhatcheckBox_CheckedChanged(object sender, EventArgs e)
        {
            if (chunhatcheckBox.Checked)
            {
                addDay("Sunday","Chủ nhật");
                if (heThongTableAdapter1.UpdateHeThong("true", "chunhat") > 0)
                {
                    MessageBox.Show("Thêm các ngày nghỉ chủ nhật trong năm thành công !");
                }
                else
                {
                    MessageBox.Show("Lỗi");
                }
            }
            else
            {
                deleteDay("Sunday");
                if (heThongTableAdapter1.UpdateHeThong("false", "chunhat") > 0)
                {
                    MessageBox.Show("Xóa các ngày nghỉ chủ nhật trong năm thành công !");
                }
                else
                {
                    MessageBox.Show("Lỗi");
                }
            }
        }
     
        private void loadcheck(){
            //chu nhat check
            this.chunhatcheckBox.Checked = Boolean.Parse(heThongTableAdapter1.GetHeThong("chunhat").ToString());          
            this.chunhatcheckBox.CheckedChanged += new System.EventHandler(this.chunhatcheckBox_CheckedChanged);
            //thu bay check
            this.thubaycheckBox.Checked = Boolean.Parse(heThongTableAdapter1.GetHeThong("thubay").ToString());
            this.thubaycheckBox.CheckedChanged += new System.EventHandler(this.thubaycheckBox_CheckedChanged);
        }
    }
}
